﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LAPI.Web.Controllers.Autenticacion
{
    public class AutenticacionController : Controller
    {
        /// <summary>
        /// GET: /Autenticacion/Login
        /// </summary>
        /// <returns>View Login.cshtml</returns>
        [HttpGet]
        public ActionResult Login()
        {
            return View();
        }

        /// <summary>
        /// GET: /Autenticacion/Registro
        /// </summary>
        /// <returns>View Registro.cshtml</returns>
        [HttpGet]
        public ActionResult Registro()
        {
            return View();
        }

        /// <summary>
        /// GET: /Autenticacion/RecordarContrasena
        /// </summary>
        /// <returns>View RecordarContrasena.cshtml</returns>
        [HttpGet]
        public ActionResult RecordarContrasena()
        {
            return View();
        }


        /// <summary>
        /// POST: /Autenticacion/Login
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public String Login(LAPI.Data.Model.Usuario model)
        {
            LAPI.Business.Acciones.ResultadoAccion resultado;

            //1. Validamos la autenticacion del usuario
            LAPI.Business.Acciones.AccAutenticarUsuario autenticar = new Business.Acciones.AccAutenticarUsuario();
            resultado = autenticar.AutenticarUsuario(model);

            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //no valida, informamos del error
                return resultado.ResultadoToJson();
            }

            //2. Todo ha ido bien, autenticamos, y redirigmos a la principal
            System.Web.Security.FormsAuthentication.SetAuthCookie(model.User, true);
            resultado = new Business.Acciones.ResultadoAccion();
            resultado.setResultado(Business.Acciones.TipoResultado.REDIRECCION);
            resultado.addMensaje(              
                mensaje: Url.Action(actionName: "Home", controllerName: "Home"),
                tipoMensaje: Business.Acciones.TipoMensaje.REDIRECCION
            );

            return resultado.ResultadoToJson();

        }

        /// <summary>
        /// POST: /Autenticacion/Registro
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public String Registro(LAPI.Data.Model.Usuario model)
        {            
            LAPI.Business.Acciones.ResultadoAccion resultado;           

            //1. Validamos que podamos registrar el usuario
            LAPI.Business.Acciones.AccValidarDatosRegistro validacion = new Business.Acciones.AccValidarDatosRegistro();
            resultado = validacion.ValidarDatosRegistro(datosUsuario: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //no valida, informamos del error
                return resultado.ResultadoToJson();
            }

            //2. Registramos el usuario
            LAPI.Business.Acciones.AccRegistrarUsuario registrar = new Business.Acciones.AccRegistrarUsuario();
            resultado = registrar.RegistrarUsuario(datosUsuario: model);
            if (resultado.getResultado() == Business.Acciones.TipoResultado.ERROR)
            {
                //no valida, informamos del error
                return resultado.ResultadoToJson();
            }

            //3. Todo ha ido bien, redirigimos a la vista de login
            resultado = new Business.Acciones.ResultadoAccion();
            resultado.setResultado(Business.Acciones.TipoResultado.REDIRECCION);
            resultado.addMensaje(
                mensaje: Url.Action(actionName: "Login", controllerName: "Autenticacion"),
                tipoMensaje: Business.Acciones.TipoMensaje.REDIRECCION
            );

            return resultado.ResultadoToJson();
        }
    }
}
